This invention relates generally to the field of data processing and more particularly to an interrupt arbiter for managing interrupt resources in a computing system.
Devices inside a computer often need to xe2x80x9cinterruptxe2x80x9d the processor when they need immediate attention. This is accomplished by generating an interrupt signal to inform the processor that an event has occurred. For example, a keyboard generates an interrupt signal with each keystroke. Device interrupts are fed to the processor using a special piece of hardware called an interrupt controller that receives the interrupt signals from the devices and correctly presents them to the processor.
An operating system running on the computer is responsible for assigning the inputs on the interrupt controller to the devices. Often, proper performance of the computer greatly depends upon the allocation of the computer""s interrupt resources. In general, a unique interrupt resource is assigned to each device. Because of the way the computer is designed it is generally not feasible for more than one device to use an interrupt at one time. If more than one device uses an interrupt at one time, the processor can respond to the wrong event and may respond to the wrong device at the wrong time. In some circumstances, however, it may be possible to share the inputs on the interrupt resources between the multiple devices depending on the character of the devices.
Currently, various modules within the operating system are responsible for allocating the interrupt resources. Each device driver specifies a set of ranges and range types that represent all of the possible resources the device could use. The operating system groups these ranges into an interrupt range list such as {{I/O 60-60, 64-64, Interrupt 1}, {I/O 60-60, 64-64, no interrupt}}. In this example, if the operating system were to select the set with no interrupt, it would be forced to xe2x80x9cpollxe2x80x9d the corresponding device. If, however, the operating system selected the first set then the requesting device would use interrupt 1 to inform the operating system that it needed attention.
Typically, the interrupt resources are allocated via boot code of a computer. If a device subsequently requests an interrupt resource, the operating system uses the current state of the interrupt range list to discover whether a requested range conflicts with a previously allocated range. Thus, in conventional systems the allocation of interrupt resources is a function of previously allocated resources and often produces less than adequate results.
In addition, allocating interrupt resources has become more difficult as the number and variety of devices that may be connected to the computer has expanded. Furthermore, new computers support a xe2x80x9cPlug and Playxe2x80x9d framework that seeks to automatically configure devices as they are added to the computer. For these reasons, and for other reasons stated below which will become apparent to those skilled in the art upon reading and understanding the present specification, there is a need in the art for an improved arbitration mechanism that more effectively allocates interrupt resources.
An interrupt arbiter for a computer is described. The arbiter allocates interrupt resources to a plurality of devices within a computer such as a modem, keyboard, video controller, serial port, PCMCIA card, etc. As devices request interrupt resources, the inventive arbiter uses the Advanced Configuration and Power Interface (ACPI) to allocate interrupt resources based on the actual hardware topology of the computer. The improved arbiter allocates the interrupt resources by using configuration information that conforms to the ACPI specification and that describes the underlying connection circuitry, such as the multiplexors, routers, switches, etc., that communicates interrupt signals generated by the devices. In one embodiment the arbiter retrieves the configuration information from the computer""s basic input/output system (BIOS). In addition, the arbiter reconfigures connection circuitry of the computing system when necessary in order to improve the allocation of interrupt resources.